layui.use(['table', 'form', 'layedit', 'laydate'], function () {
    var table = layui.table,
        form = layui.form,
        layer = layui.layer,
        layedit = layui.layedit,
        laydate = layui.laydate;

    // ================================================ 表格 ================================================
    /**
     * 初始化表格
     */
    table.render({
        id: 'quartzTable',
        elem: '#quartzList',
        url: '/quartz/list_data',
        method: 'get',
        page: true,
        limit: 1,
        height: 'full-30',
        toolbar: '#quartzHeaderBar',
        title: '定时任务列表',
        cols: [[
            {type: 'checkbox', fixed: 'left'},
            {field: 'jobName', title: 'Job名称', width: '5%', fixed: 'left'},
            {field: 'jobGroup', title: 'Job所属组', width: '5%'},
            {field: 'triggerName', title: '触发器名称', width: '7%'},
            {field: 'triggerGroup', title: '触发器所属组', width: '7%'},
            {field: 'jobClassName', title: '任务类名称', width: '20%'},
            {field: 'cronExpression', title: 'Cron表达式', width: '8%'},
            {field: 'triggerState', title: '触发器当前状态', width: '7%'},
            {field: 'nextFireTime', title: '下次触发时间', width: '12%', sort: true},
            {field: 'prevFireTime', title: '上次触发时间', width: '12%', sort: true},
            {field: 'startTime', title: '任务开始时间', width: '12%', sort: true},
            {field: 'endTime', title: '任务结束时间', width: '12%', sort: true},
            {field: 'jobDescription', title: '任务描述', width: '18%'},
            {title: '操作', width: '10%', fixed: 'right', toolbar: '#quartzToolBar'}
        ]]
    });


    /**
     * 头工具栏事件
     */
    table.on('toolbar(quartzFilter)', function (obj) {
        var checkStatus = table.checkStatus(obj.config.id);
        var data = checkStatus.data;
        switch (obj.event) {
            case 'addTask':
                // 操作类型为添加
                addTask();
                break;
            case 'pauseTask':
                // 操作类型为暂停
                if (data.length !== 0) {
                    // 操作类型为暂停
                    data[0].operate = 'pause';
                    // 暂停任务
                    operateQuartz(data[0]);
                }
                break;
            case 'resumeTask':
                // 操作类型为恢复
                if (data.length !== 0) {
                    data[0].operate = 'resume';
                    // 恢复任务
                    operateQuartz(data[0]);
                }
                break;
            case 'deleteTask':
                // 操作类型为删除
                if (data.length !== 0) {
                    data[0].operate = 'delete';
                    // 删除任务
                    operateQuartz(data[0]);
                }
                break;
        }
    });

    /**
     * 监听行工具事件
     */
    table.on('tool(quartzFilter)', function (obj) {
        var data = obj.data;
        if (obj.event === 'delete') {
            layer.confirm('真的删除该任务么', function (index) {
                obj.del();
                // 操作类型为新增
                data.operate = 'delete';
                // 新增任务
                operateQuartz(data);
                layer.close(index);
            });
        } else if (obj.event === 'pause') {
            // 操作类型为新增
            data.operate = 'pause';
            // 新增任务
            operateQuartz(data);

        } else if (obj.event === 'resume') {
            // 操作类型为新增
            data.operate = 'resume';
            // 新增任务
            operateQuartz(data);
        }
    });

    // ================================================ 表单 ================================================

    // 初始化开始日期框
    laydate.render({
        elem: '#startTime',
        type: 'datetime'
    });

    // 初始化结束日期框
    laydate.render({
        elem: '#endTime',
        type: 'datetime'
    });

    //自定义验证规则
    // form.verify({
    //     title: function (value) {
    //         if (value.length < 5) {
    //             return '标题至少得5个字符啊';
    //         }
    //     }
    //     , pass: [
    //         /^[\S]{6,12}$/
    //         , '密码必须6到12位，且不能出现空格'
    //     ]
    //     , content: function (value) {
    //         layedit.sync(editIndex);
    //     }
    // });

    //监听提交
    form.on('submit(doSave)', function (data) {
        // 操作类型为新增
        data.field.operate = 'save';
        // 新增任务
        operateQuartz(data.field);
    });

    /**
     * 添加定时任务
     */
    function addTask() {
        layer.open({
            type: 1,
            title: '新增任务',
            offset: 'auto', // 具体配置参考：http://www.layui.com/doc/modules/layer.html#offset
            id: 'layerDemo1', // 防止重复弹出
            content: $('#quartzForm'),
            area: ['600px', '740px'],
            closeBtn: 1,
            btnAlign: 'r', // 按钮居右
            shade: 0.3, // 显示遮罩
            success: function (res) {
                reloadTable();
            },
            cancel: function (index, layero) {
                if (confirm('确定要关闭么')) { //只有当点击confirm框的确定时，该层才会关闭
                    layer.close(index)
                }
                return false;
            }
        });
    }

    /**
     * 重载表格
     */
    function reloadTable() {
        table.reload('quartzTable', {
            url: '/quartz/list_data',
            method: 'get'
        });
    }

    /**
     * 提示信息
     * @param icon 图标
     * @param title 标题
     * @param msg 消息
     */
    function showMsg(icon, title, msg) {
        layer.msg(
            msg,
            {
                icon: icon,
                time: 3 * 1000
            }
        );
    }

    /**
     * 操作定时任务
     * @param data
     */
    function operateQuartz(data) {
        $.ajax({
            type: "POST",
            url: "/quartz/operate",
            async: false,
            data: data,
            dataType: "json",
            success: function (res) {
                if (res != null && res !== '' && res.code === 200) {
                    showMsg(1, "提示", res.message)
                } else {
                    showMsg(2, "提示", res.message)
                }
                reloadTable();
            },
            error: function (err) {
                showMsg(2, "提示", err.message)
                reloadTable();
            }
        });
    }
});